const { query } = require('../config/db');
const bcrypt = require('bcryptjs');
require('dotenv').config();

async function createInitialAdmin() {
  try {
    console.log('🚀 开始创建初始管理员和角色...');

    // 1. 创建超级管理员角色
    console.log('📝 创建超级管理员角色...');
    
    // 检查角色是否已存在
    const existingRole = await query(
      'SELECT id FROM admin_roles WHERE role_name = ?',
      ['超级管理员']
    );

    let roleId;
    if (existingRole.length === 0) {
      const roleResult = await query(`
        INSERT INTO admin_roles (role_name, permissions, description) 
        VALUES (?, ?, ?)
      `, [
        '超级管理员',
        JSON.stringify(['*']), // 所有权限
        '系统超级管理员，拥有所有权限'
      ]);
      roleId = roleResult.insertId;
      console.log('✅ 超级管理员角色创建成功');
    } else {
      roleId = existingRole[0].id;
      console.log('ℹ️  超级管理员角色已存在');
    }

    // 2. 创建普通管理员角色
    console.log('📝 创建普通管理员角色...');
    
    const existingNormalRole = await query(
      'SELECT id FROM admin_roles WHERE role_name = ?',
      ['管理员']
    );

    if (existingNormalRole.length === 0) {
      await query(`
        INSERT INTO admin_roles (role_name, permissions, description) 
        VALUES (?, ?, ?)
      `, [
        '管理员',
        JSON.stringify([
          'dashboard:view',
          'product:view', 'product:create', 'product:edit',
          'order:view', 'order:edit',
          'user:view',
          'category:view', 'category:create', 'category:edit'
        ]),
        '普通管理员，拥有基本管理权限'
      ]);
      console.log('✅ 普通管理员角色创建成功');
    } else {
      console.log('ℹ️  普通管理员角色已存在');
    }

    // 3. 创建初始管理员账户
    console.log('👤 创建初始管理员账户...');
    
    // 检查管理员是否已存在
    const existingAdmin = await query(
      'SELECT id FROM admin_users WHERE username = ?',
      ['admin']
    );

    if (existingAdmin.length === 0) {
      // 加密密码
      const password = 'admin123';
      const saltRounds = 10;
      const passwordHash = await bcrypt.hash(password, saltRounds);

      await query(`
        INSERT INTO admin_users (username, password_hash, full_name, role_id, is_active) 
        VALUES (?, ?, ?, ?, ?)
      `, [
        'admin',
        passwordHash,
        '系统管理员',
        roleId,
        true
      ]);

      console.log('✅ 初始管理员账户创建成功');
      console.log('📋 登录信息:');
      console.log('   用户名: admin');
      console.log('   密码: admin123');
      console.log('⚠️  请登录后立即修改默认密码！');
    } else {
      console.log('ℹ️  初始管理员账户已存在');
    }

    // 4. 创建一些基础分类
    console.log('📂 创建基础商品分类...');
    
    const categories = [
      { name: '戒指', sort_order: 1 },
      { name: '项链', sort_order: 2 },
      { name: '耳饰', sort_order: 3 },
      { name: '手镯', sort_order: 4 },
      { name: '吊坠', sort_order: 5 }
    ];

    for (const category of categories) {
      const existing = await query(
        'SELECT id FROM categories WHERE name = ?',
        [category.name]
      );

      if (existing.length === 0) {
        await query(
          'INSERT INTO categories (parent_id, name, sort_order) VALUES (?, ?, ?)',
          [0, category.name, category.sort_order]
        );
        console.log(`✅ 分类 "${category.name}" 创建成功`);
      }
    }

    // 5. 创建系统配置
    console.log('⚙️  创建系统配置...');
    
    const configs = [
      { key: 'site_name', value: '珠宝管理系统', description: '网站名称' },
      { key: 'low_stock_threshold', value: '5', description: '库存预警阈值' },
      { key: 'default_shipping_fee', value: '0.00', description: '默认运费' }
    ];

    for (const config of configs) {
      const existing = await query(
        'SELECT id FROM system_configs WHERE config_key = ?',
        [config.key]
      );

      if (existing.length === 0) {
        await query(
          'INSERT INTO system_configs (config_key, config_value, description) VALUES (?, ?, ?)',
          [config.key, config.value, config.description]
        );
        console.log(`✅ 配置 "${config.key}" 创建成功`);
      }
    }

    console.log('🎉 初始化完成！');
    console.log('🌐 现在可以启动服务器并访问管理后台了');

  } catch (error) {
    console.error('❌ 初始化失败:', error);
    process.exit(1);
  }

  process.exit(0);
}

// 如果直接运行此脚本
if (require.main === module) {
  createInitialAdmin();
}

module.exports = createInitialAdmin;
